Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

320
Visualizações
Ethers.js - "ERC721A: transferencia del propietario incorrecto" Error de MetaMask

Mi objetivo es setApprovalForAll para un contrato de token antes de ejecutar la función safeTransferFrom para cada tokenId en la colección NFT. De esta manera, podré transferir NFT a otra dirección sin que MetaMask solicite varias aprobaciones.

Sin embargo, recibo un error al ejecutar la función safeTransferFrom , se activa el siguiente error:ver imagen

Esto sucede incluso después de llamar a la función setApprovalForAll . La transacción setApprovalForAll parece haber sido exitosa también:

ver la actividad de MetaMask

pero llamar a isApprovedForAll dice lo contrario (ver el comentario en la línea 16 del código).

Creo que es posible que el error se genere debido a que no llamé a la función setApprovalForAll correctamente, porque ¿por qué otra razón isApprovedForAll devolvería false ?

 document.querySelector('.click-me').onclick = async () => { const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = await provider.getSigner(); const CONTRACT_ADDRESS = '0x...'; // token contract address const RECEIVER_ADDRESS = '0x...'; // this address expected to get approval for all const ABI = [ 'function setApprovalForAll(address operator, bool _approved)', 'function safeTransferFrom(address from, address to, uint256 tokenId)', 'function isApprovedForAll(address owner, address operator) view returns (bool)' ]; const contract = new ethers.Contract(CONTRACT_ADDRESS, ABI, signer); try { const isApproved = await contract.isApprovedForAll(CONTRACT_ADDRESS, RECEIVER_ADDRESS); console.log(isApproved); // returns false even after several attempts await contract.setApprovalForAll(RECEIVER_ADDRESS, true); // seems to work fine, even shows in MetaMask activity // ERROR SEEMS TO OCCUR HERE const test = await contract.safeTransferFrom(CONTRACT_ADDRESS, RECEIVER_ADDRESS, 749); // 749 is my NFT tokenId console.log(test); } catch (error) { console.log(error.message) } };
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Debe cambiar la dirección del contrato al propietario del NFT, consulte a continuación

 document.querySelector('.click-me').onclick = async () => { const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = await provider.getSigner(); const CONTRACT_ADDRESS = '0x...'; // token contract address const RECEIVER_ADDRESS = '0x...'; // this address expected to get approval for all const ABI = [ 'function setApprovalForAll(address operator, bool _approved)', 'function safeTransferFrom(address from, address to, uint256 tokenId)', 'function isApprovedForAll(address owner, address operator) view returns (bool)' ]; const contract = new ethers.Contract(CONTRACT_ADDRESS, ABI, signer); try { const isApproved = await contract.isApprovedForAll(CONTRACT_ADDRESS, RECEIVER_ADDRESS); console.log(isApproved); // returns false even after several attempts await contract.setApprovalForAll(RECEIVER_ADDRESS, true); // seems to work fine, even shows in MetaMask activity // FIXED const test = await contract.safeTransferFrom(signer.address, RECEIVER_ADDRESS, 749); // 749 is my NFT tokenId console.log(test); } catch (error) { console.log(error.message) } };
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda